home *** CD-ROM | disk | FTP | other *** search
/ SGI Freeware 2002 November / SGI Freeware 2002 November - Disc 1.iso / dist / fw_bind.idb / usr / freeware / include / bind / irs.h.z / irs.h
C/C++ Source or Header  |  2001-04-12  |  11KB  |  322 lines

  1. /*
  2.  * Copyright (c) 1996,1999 by Internet Software Consortium.
  3.  *
  4.  * Permission to use, copy, modify, and distribute this software for any
  5.  * purpose with or without fee is hereby granted, provided that the above
  6.  * copyright notice and this permission notice appear in all copies.
  7.  *
  8.  * THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM DISCLAIMS
  9.  * ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES
  10.  * OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL INTERNET SOFTWARE
  11.  * CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
  12.  * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
  13.  * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
  14.  * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
  15.  * SOFTWARE.
  16.  */
  17.  
  18. /*
  19.  * $Id: irs.h,v 8.5 2000/12/23 08:14:49 vixie Exp $
  20.  */
  21.  
  22. #ifndef _IRS_H_INCLUDED
  23. #define _IRS_H_INCLUDED
  24.  
  25. #include <sys/types.h>
  26.  
  27. #include <arpa/nameser.h>
  28.  
  29. #include <grp.h>
  30. #include <netdb.h>
  31. #include <resolv.h>
  32. #include <pwd.h>
  33.  
  34. /*
  35.  * This is the group map class.
  36.  */
  37. struct irs_gr {
  38.     void *        private;
  39.     void        (*close) __P((struct irs_gr *));
  40.     struct group *    (*next) __P((struct irs_gr *));
  41.     struct group *    (*byname) __P((struct irs_gr *, const char *));
  42.     struct group *    (*bygid) __P((struct irs_gr *, gid_t));
  43.     int        (*list) __P((struct irs_gr *, const char *,
  44.                      gid_t, gid_t *, int *));
  45.     void        (*rewind) __P((struct irs_gr *));
  46.     void        (*minimize) __P((struct irs_gr *));
  47.     struct __res_state * (*res_get) __P((struct irs_gr *));
  48.     void        (*res_set) __P((struct irs_gr *, res_state,
  49.                     void (*)(void *)));
  50. };
  51.  
  52. /*
  53.  * This is the password map class.
  54.  */
  55. struct irs_pw {
  56.     void *        private;
  57.     void        (*close) __P((struct irs_pw *));
  58.     struct passwd *    (*next) __P((struct irs_pw *));
  59.     struct passwd *    (*byname) __P((struct irs_pw *, const char *));
  60.     struct passwd *    (*byuid) __P((struct irs_pw *, uid_t));
  61.     void        (*rewind) __P((struct irs_pw *));
  62.     void        (*minimize) __P((struct irs_pw *));
  63.     struct __res_state * (*res_get) __P((struct irs_pw *));
  64.     void        (*res_set) __P((struct irs_pw *, res_state,
  65.                     void (*)(void *)));
  66. };
  67.  
  68. /*
  69.  * This is the service map class.
  70.  */
  71. struct irs_sv {
  72.     void *        private;
  73.     void        (*close) __P((struct irs_sv *));
  74.     struct servent *(*byname) __P((struct irs_sv *,
  75.                        const char *, const char *));
  76.     struct servent *(*byport) __P((struct irs_sv *, int, const char *));
  77.     struct servent *(*next) __P((struct irs_sv *));
  78.     void        (*rewind) __P((struct irs_sv *));
  79.     void        (*minimize) __P((struct irs_sv *));
  80.     struct __res_state * (*res_get) __P((struct irs_sv *));
  81.     void        (*res_set) __P((struct irs_sv *, res_state,
  82.                     void (*)(void *)));
  83. };
  84.  
  85. /*
  86.  * This is the protocols map class.
  87.  */
  88. struct irs_pr {
  89.     void *        private;
  90.     void        (*close) __P((struct irs_pr *));
  91.     struct protoent    *(*byname) __P((struct irs_pr *, const char *));
  92.     struct protoent    *(*bynumber) __P((struct irs_pr *, int));
  93.     struct protoent    *(*next) __P((struct irs_pr *));
  94.     void        (*rewind) __P((struct irs_pr *));
  95.     void        (*minimize) __P((struct irs_pr *));
  96.     struct __res_state * (*res_get) __P((struct irs_pr *));
  97.     void        (*res_set) __P((struct irs_pr *, res_state,
  98.                     void (*)(void *)));
  99. };
  100.  
  101. /*
  102.  * This is the hosts map class.
  103.  */
  104. struct irs_ho {
  105.     void *        private;
  106.     void        (*close) __P((struct irs_ho *));
  107.     struct hostent *(*byname) __P((struct irs_ho *, const char *));
  108.     struct hostent *(*byname2) __P((struct irs_ho *, const char *, int));
  109.     struct hostent *(*byaddr) __P((struct irs_ho *,
  110.                        const void *, int, int));
  111.     struct hostent *(*next) __P((struct irs_ho *));
  112.     void        (*rewind) __P((struct irs_ho *));
  113.     void        (*minimize) __P((struct irs_ho *));
  114.     struct __res_state * (*res_get) __P((struct irs_ho *));
  115.     void        (*res_set) __P((struct irs_ho *, res_state,
  116.                     void (*)(void *)));
  117. };
  118.  
  119. /*
  120.  * This is the networks map class.
  121.  */
  122. struct irs_nw {
  123.     void *        private;
  124.     void        (*close) __P((struct irs_nw *));
  125.     struct nwent *    (*byname) __P((struct irs_nw *, const char *, int));
  126.     struct nwent *    (*byaddr) __P((struct irs_nw *, void *, int, int));
  127.     struct nwent *    (*next) __P((struct irs_nw *));
  128.     void        (*rewind) __P((struct irs_nw *));
  129.     void        (*minimize) __P((struct irs_nw *));
  130.     struct __res_state * (*res_get) __P((struct irs_nw *));
  131.     void        (*res_set) __P((struct irs_nw *, res_state,
  132.                     void (*)(void *)));
  133. };
  134.  
  135. /*
  136.  * This is the netgroups map class.
  137.  */
  138. struct irs_ng {
  139.     void *        private;
  140.     void        (*close) __P((struct irs_ng *));
  141.     int        (*next) __P((struct irs_ng *, char **, char **,
  142.                      char **));
  143.     int        (*test) __P((struct irs_ng *, const char *,
  144.                      const char *, const char *,
  145.                      const char *));
  146.     void        (*rewind) __P((struct irs_ng *, const char *));
  147.     void        (*minimize) __P((struct irs_ng *));
  148. };
  149.  
  150. /*
  151.  * This is the generic map class, which copies the front of all others.
  152.  */
  153. struct irs_map {
  154.     void *        private;
  155.     void        (*close) __P((void *));
  156. };
  157.  
  158. /*
  159.  * This is the accessor class.  It contains pointers to all of the
  160.  * initializers for the map classes for a particular accessor.
  161.  */
  162. struct irs_acc {
  163.     void *        private;
  164.     void        (*close) __P((struct irs_acc *));
  165.     struct irs_gr *    (*gr_map) __P((struct irs_acc *));
  166.     struct irs_pw *    (*pw_map) __P((struct irs_acc *));
  167.     struct irs_sv *    (*sv_map) __P((struct irs_acc *));
  168.     struct irs_pr *    (*pr_map) __P((struct irs_acc *));
  169.     struct irs_ho *    (*ho_map) __P((struct irs_acc *));
  170.     struct irs_nw *    (*nw_map) __P((struct irs_acc *));
  171.     struct irs_ng *    (*ng_map) __P((struct irs_acc *));
  172.     struct __res_state * (*res_get) __P((struct irs_acc *));
  173.     void        (*res_set) __P((struct irs_acc *, res_state,
  174.                     void (*)(void *)));
  175. };
  176.  
  177. /*
  178.  * This is because the official definition of "struct netent" has no
  179.  * concept of CIDR even though it allows variant address families (on
  180.  * output but not input).  The compatibility stubs convert the structs
  181.  * below into "struct netent"'s.
  182.  */
  183. struct nwent {
  184.     char        *n_name;    /* official name of net */
  185.     char        **n_aliases;    /* alias list */
  186.     int        n_addrtype;    /* net address type */
  187.     void        *n_addr;    /* network address */
  188.     int        n_length;    /* address length, in bits */
  189. };
  190.  
  191. /*
  192.  * Hide external function names from POSIX.
  193.  */
  194. #define    irs_gen_acc    __irs_gen_acc
  195. #define    irs_lcl_acc    __irs_lcl_acc
  196. #define    irs_dns_acc    __irs_dns_acc
  197. #define    irs_nis_acc    __irs_nis_acc
  198. #define    irs_irp_acc    __irs_irp_acc
  199.  
  200. /*
  201.  * Externs.
  202.  */
  203. extern struct irs_acc *    irs_gen_acc __P((const char *options, 
  204.                      const char *conf_file));
  205. extern struct irs_acc *    irs_lcl_acc __P((const char *options));
  206. extern struct irs_acc *    irs_dns_acc __P((const char *options));
  207. extern struct irs_acc *    irs_nis_acc __P((const char *options));
  208. extern struct irs_acc *    irs_irp_acc __P((const char *options));
  209.  
  210. extern void        irs_destroy(void);
  211.  
  212. /*
  213.  * These forward declarations are for the semi-private functions in
  214.  * the get*.c files. Each of these funcs implements the real get*
  215.  * functionality and the standard versions are just wrappers that
  216.  * call these. Apart from the wrappers, only irpd is expected to
  217.  * call these directly, hence these decls are put here and not in
  218.  * the /usr/include replacements.
  219.  */
  220.  
  221. struct net_data;            /* forward */
  222.  
  223. /*
  224.  * net_data_create gets a singleton net_data object.  net_data_init
  225.  * creates as many net_data objects as times it is called.  Clients using
  226.  * the default interface will use net_data_create by default.  Servers will
  227.  * probably want net_data_init (one call per client)
  228.  */
  229. struct net_data *net_data_create(const char *conf_file);
  230. struct net_data *net_data_init(const char *conf_file);
  231. void        net_data_destroy(void *p);
  232.     
  233. extern struct group    *getgrent_p __P((struct net_data *net_data));
  234. extern struct group    *getgrnam_p __P((const char *name,
  235.                     struct net_data *net_data));
  236. extern struct group    *getgrgid_p __P((gid_t gid,
  237.                     struct net_data *net_data));
  238. extern int         setgroupent_p __P((int stayopen,
  239.                        struct net_data *net_data));
  240. extern void         endgrent_p __P((struct net_data *net_data));
  241. extern int        getgrouplist_p __P((const char *name,
  242.                         gid_t basegid,
  243.                         gid_t *groups,
  244.                         int *ngroups,
  245.                         struct net_data *net_data));
  246.  
  247. #ifdef SETGRENT_VOID
  248. extern void         setgrent_p __P((struct net_data *net_data));
  249. #else
  250. extern int         setgrent_p __P((struct net_data *net_data));
  251. #endif
  252.  
  253. extern struct hostent     *gethostbyname_p __P((const char *name,
  254.                           struct net_data *net_data));
  255. extern struct hostent     *gethostbyname2_p __P((const char *name, int af,
  256.                            struct net_data *net_data));
  257. extern struct hostent     *gethostbyaddr_p __P((const char *addr, int len,
  258.                           int af,
  259.                           struct net_data *net_data));
  260. extern struct hostent     *gethostent_p __P((struct net_data *net_data));
  261. extern void         sethostent_p __P((int stayopen,
  262.                       struct net_data *net_data));
  263. extern void         endhostent_p __P((struct net_data *net_data));
  264.  
  265. extern struct netent     *getnetent_p __P((struct net_data *net_data));
  266. extern struct netent     *getnetbyname_p __P((const char *name,
  267.                          struct net_data *net_data));
  268. extern struct netent     *getnetbyaddr_p __P((unsigned long net, int type,
  269.                          struct net_data *net_data));
  270. extern void        setnetent_p __P((int stayopen,
  271.                      struct net_data *net_data));
  272. extern void        endnetent_p __P((struct net_data *net_data));
  273.  
  274. extern void        setnetgrent_p __P((const char *netgroup,
  275.                        struct net_data *net_data));
  276. extern void        endnetgrent_p __P((struct net_data *net_data));
  277. extern int        innetgr_p __P((const char *netgroup,
  278.                        const char *host,
  279.                        const char *user,
  280.                        const char *domain,
  281.                        struct net_data *net_data));
  282. extern int        getnetgrent_p __P((char **host, char **user,
  283.                        char **domain,
  284.                        struct net_data *net_data));
  285.  
  286. extern struct protoent  *getprotoent_p __P((struct net_data *net_data));
  287. extern struct protoent  *getprotobyname_p __P((const char *name,
  288.                            struct net_data *net_data));
  289. extern struct protoent    *getprotobynumber_p __P((int proto,
  290.                          struct net_data *net_data));
  291. extern void        setprotoent_p __P((int stayopen,
  292.                        struct net_data *net_data));
  293. extern void        endprotoent_p __P((struct net_data *net_data));
  294.  
  295.  
  296. extern struct passwd     *getpwent_p __P((struct net_data *net_data));
  297. extern struct passwd     *getpwnam_p __P((const char *name,
  298.                      struct net_data *net_data));
  299. extern struct passwd     *getpwuid_p __P((uid_t uid,
  300.                      struct net_data *net_data));
  301. extern int        setpassent_p __P((int stayopen,
  302.                       struct net_data *net_data));
  303. extern void        endpwent_p __P((struct net_data *net_data));
  304.  
  305. #ifdef SETPWENT_VOID
  306. extern void        setpwent_p __P((struct net_data *net_data));
  307. #else
  308. extern int        setpwent_p __P((struct net_data *net_data));
  309. #endif
  310.  
  311. extern struct servent     *getservent_p __P((struct net_data *net_data));
  312. extern struct servent     *getservbyname_p __P((const char *name,
  313.                           const char *proto,
  314.                           struct net_data *net_data));
  315. extern struct servent     *getservbyport_p __P((int port, const char *proto,
  316.                           struct net_data *net_data));
  317. extern void        setservent_p __P((int stayopen,
  318.                       struct net_data *net_data));
  319. extern void        endservent_p __P((struct net_data *net_data));
  320.  
  321. #endif /*_IRS_H_INCLUDED*/
  322.